package com.ruoyi.manage.enterprise.domain;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Dict;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import lombok.experimental.Tolerate;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;


/**
 * 产品基本信息对象 pc_product_base_info
 *
 * @author ruoyi
 * @date 2025-08-18
 */
@Data
@ApiModel(value="产品基本信息对象", description="产品基本信息")
@TableName("pc_product_base_info")
@Builder
public class PcProductBaseInfo extends BaseEntity implements Serializable {

    private static final long serialVersionUID=1L;


    /**
     *  主键
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "主键")
    private  Long  id;

    /**
     *  产品编号
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "产品编号")
    @ApiModelProperty(value = "产品编号")
    private  String  productSerialNumber;

    /**
     *  产品名称
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "产品名称")
    @ApiModelProperty(value = "产品名称")
    private  String  productName;

    /**
     *  产品简称
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "产品简称")
    @ApiModelProperty(value = "产品简称")
    private  String  productShortName;

    /**
     *  产品类型
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "产品类型")
    @ApiModelProperty(value = "产品类型")
    private  String  productType;

    /**
     *  产品图片
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "产品图片")
    @ApiModelProperty(value = "产品图片")
    private  String  productLogo;

    /**
     *  机构图片
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "机构图片")
    @ApiModelProperty(value = "机构图片")
    private  String  orgLogo;

    /**
     *  所属金融机构path
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "所属金融机构path")
    @ApiModelProperty(value = "所属金融机构path")
    private  String  belongInstitution;

    /**
     *  所属机构名称
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "所属机构名称")
    @ApiModelProperty(value = "所属机构名称")
    private  String  belongInstitutionName;

    /**
     *  主担保方式
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "主担保方式")
    @ApiModelProperty(value = "主担保方式")
    @NotBlank(message = "主担保方式不能为空")
    private  String  mainGuaranteeWay;

    /**
     *  二级担保方式（多个之间以逗号分隔）
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Dict(readConverterExp = "多=个之间以逗号分隔")
    @Excel(name = "二级担保方式", readConverterExp = "多=个之间以逗号分隔")
    @ApiModelProperty(value = "二级担保方式",notes="多=个之间以逗号分隔")
    private  String  secondGuaranteeWay;

    /**
     *  审批模式
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "审批模式")
    @ApiModelProperty(value = "审批模式")
    @NotBlank(message = "审批模式不能为空")
    private  String  auditMode;

    /**
     *  线上地址类型
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "线上地址类型")
    @ApiModelProperty(value = "线上地址类型")
    private  String  onlineAddressType;

    /**
     *  线上地址
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "线上地址")
    @ApiModelProperty(value = "线上地址")
    private  String  onlineAddressUrl;

    /**
     *  额度下限
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "额度下限")
    @ApiModelProperty(value = "额度下限")
    @NotNull(message = "额度下限不能为空")
    private  BigDecimal  amountLimitLower;

    /**
     *  额度上限
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "额度上限")
    @ApiModelProperty(value = "额度上限")
    @NotNull(message = "额度上限不能为空")
    private  BigDecimal  amountLimitUpper;

    /**
     *  期望利率下限(单位:%)
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "期望利率下限(单位:%)")
    @ApiModelProperty(value = "期望利率下限(单位:%)")
    @NotNull(message = "期望利率下限(单位:%)不能为空")
    private  BigDecimal  interestRateLimitLower;

    /**
     *  期望利率上限(单位:%)
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "期望利率上限(单位:%)")
    @ApiModelProperty(value = "期望利率上限(单位:%)")
    @NotNull(message = "期望利率上限(单位:%)不能为空")
    private  BigDecimal  interestRateLimitUpper;

    /**
     *  显示利率
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "显示利率")
    @ApiModelProperty(value = "显示利率")
    @NotBlank(message = "显示利率不能为空")
    private  String  interestRateShow;

    /**
     *  贷款期限下限
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "贷款期限下限")
    @ApiModelProperty(value = "贷款期限下限")
    @NotNull(message = "贷款期限下限不能为空")
    private  Long  loanPeriodLimitLower;

    /**
     *  贷款期限上限
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "贷款期限上限")
    @ApiModelProperty(value = "贷款期限上限")
    @NotNull(message = "贷款期限上限不能为空")
    private  Long  loanPeriodLimitUpper;

    /**
     *  还款方式（多个之间以逗号分隔）
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Dict(readConverterExp = "多=个之间以逗号分隔")
    @Excel(name = "还款方式", readConverterExp = "多=个之间以逗号分隔")
    @ApiModelProperty(value = "还款方式",notes="多=个之间以逗号分隔")
    @NotBlank(message = "还款方式不能为空")
    private  String  repaymentWay;

    /**
     *  服务区域
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "服务区域")
    @ApiModelProperty(value = "服务区域")
    @NotBlank(message = "服务区域不能为空")
    private  String  serviceArea;

    /**
     *  服务区域code码
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "服务区域code码")
    @ApiModelProperty(value = "服务区域code码")
    private  String  serviceAreaCode;

    /**
     *  覆盖范围
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "覆盖范围")
    @ApiModelProperty(value = "覆盖范围")
    private  String  coverage;

    /**
     *  预审材料
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "预审材料")
    @ApiModelProperty(value = "预审材料")
    private  String  inquiryMaterials;

    /**
     *  排序
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "排序")
    @ApiModelProperty(value = "排序")
    private  Long  sort;

    /**
     *  我的主推产品(机构)
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "我的主推产品(机构)")
    @ApiModelProperty(value = "我的主推产品(机构)")
    private  String  mainRecommend;

    /**
     *  固定推荐
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "固定推荐")
    @ApiModelProperty(value = "固定推荐")
    private  String  fixedRecommend;

    /**
     *  首页推荐
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "首页推荐")
    @ApiModelProperty(value = "首页推荐")
    private  String  homeRecommend;

    /**
     *  超市置顶
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "超市置顶")
    @ApiModelProperty(value = "超市置顶")
    private  String  marketTop;

    /**
     *  产品状态(1:启用  0:停用)
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "产品状态(1:启用  0:停用)")
    @ApiModelProperty(value = "产品状态(1:启用  0:停用)")
    private  String  enabled;

    /**
     *  发布人来源
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "发布人来源")
    @ApiModelProperty(value = "发布人来源")
    private  String  publishSource;

    /**
     *  审批状态（0：等待审核 1：审核通过 2：审核拒绝）
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Dict(readConverterExp = "0=：等待审核,1=：审核通过,2=：审核拒绝")
    @Excel(name = "审批状态", readConverterExp = "0=：等待审核,1=：审核通过,2=：审核拒绝")
    @ApiModelProperty(value = "审批状态",notes="0=：等待审核,1=：审核通过,2=：审核拒绝")
    private  String  auditStatus;

    /**
     *  审核时间
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "审核时间", width = 30, dateFormat = "yyyy-MM-dd")
    @ApiModelProperty(value = "审核时间")
    private  Date  auditTime;

    /**
     *  审核人
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "审核人")
    @ApiModelProperty(value = "审核人")
    private  String  auditor;

    /**
     *  审核拒绝原因
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "审核拒绝原因")
    @ApiModelProperty(value = "审核拒绝原因")
    private  String  rejectReason;

    /**
     *  申请数量
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "申请数量")
    @ApiModelProperty(value = "申请数量")
    private  Long  applyNum;

    /**
     *  授信数量
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "授信数量")
    @ApiModelProperty(value = "授信数量")
    private  Long  creditNum;

    /**
     *  放款成功率
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "放款成功率")
    @ApiModelProperty(value = "放款成功率")
    private  BigDecimal  loanSuccessRate;

    /**
     *  删除状态
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "删除状态")
    @ApiModelProperty(value = "删除状态")
    private  Long  deleted;

    /**
     *  产品版本号
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "产品版本号")
    @ApiModelProperty(value = "产品版本号")
    private  String  version;

    /**
     *  是否为最新版本
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "是否为最新版本")
    @ApiModelProperty(value = "是否为最新版本")
    private  Integer  lastVersion;

    /**
     *  备注
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "备注")
    @ApiModelProperty(value = "备注")
    private  String  remark;

    /**
     *  覆盖范围父子级code
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "覆盖范围父子级code")
    @ApiModelProperty(value = "覆盖范围父子级code")
    private  String  coverageArray;

    /**
     *  $column.columnComment
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Dict(readConverterExp = "$column.readConverterExp()")
    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
    @ApiModelProperty(value = "$comment",notes="$column.readConverterExp()")
    private  String  belongInstitutionAreaCode;

    /**
     *  $column.columnComment
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Dict(readConverterExp = "$column.readConverterExp()")
    @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
    @ApiModelProperty(value = "$comment",notes="$column.readConverterExp()")
    private  String  belongInstitutionType;

    /**
     *  资金用途
     * 对应字典表： $column.dictTable ，对应字段值： ，对应字段名：$column.dictName
     */

    @Excel(name = "资金用途")
    @ApiModelProperty(value = "资金用途")
    private  String  useProceeds;
    @TableField(exist = false)
    private List<String> ids;

    @TableField(exist = false)
    private String isCollected;

    @TableField(exist = false)
    private PcProductExtendInfo extendInfo;

    @TableField(exist = false)
    private List<PcProductRefIndustry> industries;

    @TableField(exist = false)
    private PcProductAccessStandard accessStandard;
    @Tolerate
    public PcProductBaseInfo(){}
}
